# https://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/

# {} как маркер списка аргументов xargs -0 -I

{} - маркер списка аргументов по умолчанию. Вам нужно использовать {} this с различными командами, которые принимают более двух аргументов одновременно. Например, команде mv необходимо знать имя файла.
## Следующая команда найдет все файлы .bak в текущем каталоге или ниже и переместит их в каталог ~ / .old.files:
$ find . -name "*.bak" -print0 | xargs -0 -I {} mv {} ~/old.files

Вы можете переименовать {} в другое имя. В следующем примере {} переименовывается в файл. Это более читабельно по сравнению с предыдущим примером:
$ find . -name "*.bak" -print0 | xargs -0 -I file mv file ~/old.files

Где,

-0 Если есть пробелы или символы (включая символы новой строки), многие команды не будут работать. Эта опция заботится об именах файлов с пустым пространством.
-I Заменить вхождения replace-str в начальных аргументах именами, считанными из стандартного ввода. Кроме того, пробелы без кавычек не завершают элементы ввода; вместо этого разделителем является символ новой строки.
## Работа с именами файлов с пробелами и новой строкой
Следующее будет работать неправильно, если есть какие-либо имена файлов, содержащие символы новой строки или пробелы (он обнаружит все файлы .mp3, расположенные в текущем каталоге, и воспроизведет их с помощью mplayer):
$ find . -iname "*.mp3" -print | xargs mplayer

Чтобы избавиться от этой проблемы, используйте параметр -0:
$ find . -iname "*.mp3" -print0 | xargs -0 -I mp3file mplayer mp3file

Чтобы узнать все * .c файл, расположенный в сотнях подкаталогов, и переместите их в другой каталог с именем ~ / old.src, используйте:
$ find /path/to/dir -iname "*.c" -print0 | xargs -0 -I file mv file ~/old.src


